-- lua 协程都在coroutine中
co=coroutine.create(function () print("协程") end) -- 创建协程,参数通常是匿名函数
print(co) -- thread: 00000000001981f8 返回一个thread类型
-- 创建时默认是挂起状态,不会执行   status:查看状态
print(coroutine.status(co))  -- suspended
-- 执行
coroutine.resume(co)
-- 可以使用yeild挂起协程
co1=coroutine.create(function()
    local i=0 print(i)
    coroutine.yield(i) -- 挂起
    i=i+1 print(i)
end)
s1,s2=coroutine.resume(co1) -- 0
print(s1,s2) -- yeild 如果有传递数据,返回状态(boolean) 数据,否则返回状态
coroutine.resume(co1) -- 1
-- 传递参数
co2=coroutine.create(function(x,y)
    print(x,y)
end)
coroutine.resume(co2,1,2) -- 1 2
-- 实现 生产者-消费者
producer=coroutine.create(function () --生产者
    while true do
        local message=io.read()
        coroutine.yield(message) -- 数据发送后挂起,等待消费者消费之后再生产
    end
end)
function consume()
    while true do
        local status,message=coroutine.resume(producer) -- 通知生产者生产,获取生产的数据
        print(status,message)
    end
end
consume()
